Olá! Neste tutorial iremos utilizar Deep Learning no R com o pacote keras. Deep Learning é um campo de estudo derivado de Aprendizado de Máquina (Machine Learning) e consiste de algoritmos que são inspirados pelo funcionamento e a estrutura do cerébro.

Sumário

Visão geral sobre pacotes de Deep Learning para R

Com o aumento da popularidade de Deep Learning o número de pacotes que o implementam aumentaram. Vejamos abaixo uma tabela com os pacotes mais utilizados para R:

R Package Percentile Description
nnet 96th Software for feed-forward neural networks with a single hidden layer, and for multinomial log-linear models.
neuralnet 96th Training of neural networks using backpropagation
h2o 95th R scripting functionality for H2O
RSNNS 88th Interface to the Stuttgart Neural Network Simulator (SNNS)
tensorflow 88th Interface to TensorFlow
deepnet 84th Deep learning toolkit in R
darch 79th Package for Deep Architectures and Restricted Boltzmann Machines
rnn 73rd Package to implement Recurrent Neural Networks (RRNs)
FCNN4R 52nd Interface to the FCNN library that allows user-extensible ANNs
rcppDL 7th Implementation of basic machine learning methods with many layers (deep learning), including dA (Denoising Autoencoder), SdA (Stacked Denoising Autoencoder), RBM (Restricted Boltzmann machine) and DBN (Deep Belief Nets)
deepr ??* Package to streamline the training, fine-tuning and predicting processes for deep learning based on darch and deepnet
MXNetR ??* Package that brings flexible and efficient GPU computing and state-of-art deep learning to R
Os pacotes deepr e MXNetR não foram encontrados na documentação do R, por isso os percentis não forum incluídos na tabela.

Fonte

Keras, keras e KerasR

Recentemente dois pacotes chegaram para a biblioteca R, o KerasR e o pacote para RStudio keras. Ambos provêm uma interface do pacote original Keras para Python. Interface significa que esses pacotes possibilitam um desenvolvimento utilizando a linguagem R, porém tendo acesso a praticamente todas as funcionalidades que o pacote Keras do python tem a oferecer!

As diferenças básicas entre os pacotes KerasR e keras são:

Com base nestes pontos, iremos utilizar o pacote keras do RStudio. Então vamos para a sua instalação!

Instalando o pacote keras

Primeiramente abra o RStudio e vá na aba Tools no menu superior, em seguida clique em Install Packages... e pesquise pelo pacote keras. Quando o pacote terminar de ser instalado, adicione o pacote no seu arquivo, para isso basta adicionar library(keras) em um bloco de código R no ínicio do arquivo.

Por último instale e adicione o pacote tensorflow seguindo os mesmos passos de instalção ditos anteriormente.

Caso encontre algum problema veja os passos descritos no site oficial do pacote aqui

Carregando os dados

Para carregar os dados você tem três opções:

  1. Utilizar um dos datasets que o keras oferece
    • O keras possui datasets que vem com a instalação do pacote. Por exemplo ele disponibiliza datasets para MNIST, CIFAR10 e IMDB. Eles podem ser carregados com mnist <- dataset_mnist(), cifar10 <- dataset_cifar10() ou imdb <- dataset_imdb(), respectivamente.
  2. Utilizar o seu próprio dataset, por exemplo a partir de arquivos .csv
    • Neste tutorial iremos utilizar a opção de carregar um arquivo .csv com o comando read.csv(). Iremos obter os dados a partir do UCI Machine Learning Repository.
    • Para obter os dados execute iris <- read.csv(url("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"), header = FALSE). Em seguida é importante checar se a importação dos dados foi bem sucedida, para isso execute head(iris), str(iris) e dim(iris).
  3. Ou produzir um dummy dataset
    • De forma alternativa você pode criar seus próprios dados com ajuda co comando matrix(). Por exemplo data <- matrix(rexp(1000*784), nrow = 1000, ncol = 784) para criar o dummy data e labels <- matrix(round(runif(1000*10, min = 0, max = 9)), nrow = 1000, ncol = 10) para criar valores alvos para seu dummy data criado anteriormente. Em seguida é muito importante analisar os dados gerados, pois conhecer seus dados antes de analisá-los ajuda muito na sua compreensão.
iris <- read.csv(url("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"), header = FALSE)

head(iris)
##    V1  V2  V3  V4          V5
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.9 3.0 1.4 0.2 Iris-setosa
## 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5.0 3.6 1.4 0.2 Iris-setosa
## 6 5.4 3.9 1.7 0.4 Iris-setosa
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ V1: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ V2: num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ V3: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ V4: num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ V5: Factor w/ 3 levels "Iris-setosa",..: 1 1 1 1 1 1 1 1 1 1 ...
dim(iris)
## [1] 150   5

Explorando os dados

Agora com os dados importados é importante saber o que eles são. Vendo a imagem abaixo, iremos tentar diferenciar os três tipos de iris com base nos dados.

A importação com read.csv() gera um dataframe, mas para podermos utilizar a função fit() teremos que utilizar os dados em formato de array ou matrix, ambos não possuem nomes para as colunas.

Por enquanto colunas com nomes podem ajudar no entendimento dos dados, então vamos nomea-las, pois os dados importados estão com colunas com nomes como V1, V2 … Execute o bloco de código abaixo:

names(iris) <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")

plot(iris$Petal.Length, 
     iris$Petal.Width, 
     pch=21, bg=c("red","green3","blue")[unclass(iris$Species)], 
     xlab="Petal Length", 
     ylab="Petal Width")

Analisando de forma rápida é possível notar uma correlação entre a largura e o tamanho das petálas. Para confirmar e obter um valor númerico sobre isso utilize a fução cor():

cor(iris$Petal.Length, iris$Petal.Width)
## [1] 0.9627571

Processando os dados

Construindo o modelo

Compilando e ajustando o modelo

Visualizando o histórico do modelo

Predizendo valores

Avaliando o modelo

Tuning do modelo

Salvando, carregando e exportando o modelo

Conclusão